// class Solution {
// public:
//     bool increasingTriplet(vector<int>& nums) 
//     {

//         vector<int> ret;
//         int n = nums.size();
//         if(n < 3) return false;
//         ret.push_back(nums[0]);
//         for(int i = 1; i < n; i++)
//         {
//             if(nums[i] > ret.back())
//             {
//                 ret.push_back(nums[i]);
//                 if(ret.size() >= 3) return true;
//             }
//             else
//             {
//                 //
//                 int left = 0, right = ret.size() - 1;
//                 while(left < right)
//                 {
//                     int mid = (left + right) >> 1;
//                     if(nums[i] > ret[mid]) left = mid + 1;
//                     else right = mid;
//                 }
//                 ret[left] = nums[i];
//             }
//         }

//     return false;
//     }
// };


class Solution {
public:
    bool increasingTriplet(vector<int>& nums)
    {
        int a = nums[0];
        int b = INT_MAX;
        for (int i = 1; i < nums.size(); i++)
        {
            if (nums[i] > b) return true;
            else if (nums[i] > a) b = nums[i];
            else a = nums[i];
        }
        return false;
    }
};